<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>promise</title>
</head>

<body>
    <script>

        /* 
            传入到new Promise()中的函数是同步执行的函数
         */
        let p = new Promise(function (resolve, reject) {
            if (1 == 2) {
                resolve('成功')
            } else {

                reject('失败')
            }
        })
        console.log(p);
        /* 
            then
         */

        p.then(
            (res) => {
                // 当promise的状态变成 成功 的时候，这个函数会被调用
                console.log('方式1-成功被执行了:', res);
            },
            (err) => {
                // 当promise的状态变成 失败 的时候，这个函数会被调用
                console.log('方式1-失败被执行了:', err);
            }
        )

        /* 
        
        then\catch
         */

        p.then(res => {
            // 当promise的状态变成 成功 的时候，这个函数会被调用
            console.log("方式2-成功被执行了:", res);
        }).catch(err => {
            // 当promise的状态变成 失败 的时候，这个函数会被调用
            console.log("方式2-失败被执行了:", err);
        })

        /* 
            all：只有数组中的所有Promise都成功了，才执行成功，否则执行失败
        
         */
        let promise1 = new Promise(function (resolve, reject) {
            console.log('成功1');
            resolve('成功1')
        })
        let promise2 = new Promise(function (resolve, reject) {
            console.log('成功2');
            resolve('成功2')
        })

        let allPs = Promise.all([promise1, promise2])
        allPs.then(res => {
            console.log('成功：', res);
        }).catch(err => {
            console.log('失败：', err);
        })

        /* 
        allSettled：等数组中的所Promise有的状态发生变化后，才执行
        和all方法的区别是，不要求所有的Promise都是成功状态
         */

        let allPsl = Promise.allSettled([Promise.resolve(), Promise.reject()])
        console.log('allPsl=', allPsl);


        /* 

         */

         
    </script>
</body>

</html>